草庐IT

c++ - SIMD C++ 库

全部标签

c - 我如何在 Linux 中表示成功状态代码

Windows有不同类型的状态代码,HRESULT和NTSTATUS例如,它允许表示成功和失败值。这允许像FAILED这样的宏和NT_SUCCESS.成功状态代码的一个示例是STATUS_PENDING表示IO尚未完成。我正在尝试在Linux中映射类似样式的状态代码。我有一个(WIP)跨平台库,它在Windows(用户模式和内核模式)上使用上述类型的状态代码。我有自己的“FAILED”宏来包装上述宏。我需要Linux的等价物。我环顾四周,没有发现任何有趣/有用的东西。对于可能返回错误的任何系统/平台函数(套接字、线程、锁),我需要确保将其转换为适当的状态代码类型。Windows有很多这

c - 我如何在 Linux 中表示成功状态代码

Windows有不同类型的状态代码,HRESULT和NTSTATUS例如,它允许表示成功和失败值。这允许像FAILED这样的宏和NT_SUCCESS.成功状态代码的一个示例是STATUS_PENDING表示IO尚未完成。我正在尝试在Linux中映射类似样式的状态代码。我有一个(WIP)跨平台库,它在Windows(用户模式和内核模式)上使用上述类型的状态代码。我有自己的“FAILED”宏来包装上述宏。我需要Linux的等价物。我环顾四周,没有发现任何有趣/有用的东西。对于可能返回错误的任何系统/平台函数(套接字、线程、锁),我需要确保将其转换为适当的状态代码类型。Windows有很多这

c - 是否有可用的跨平台 C 信号库(更好的开源)?

我最近在做一个项目,我需要将一部分LinuxC代码移植到Windows。该代码使用Linux信号机制(我的意思是“sigaction”、“sigprocmast”等),但在Windows上不受支持。是否有可用的C/C++库实现跨平台信号机制(更好的开源)?目前我只需要该库支持Linux和Windows.我认为这个问题对您来说也很有意义,因为有一天您可能会遇到类似的任务。我的一位同事告诉我,ACE是一个功能强大的库,完美地实现了跨平台信号机制,但他说这是一个巨大的库,真的需要一些时间来研究它。我的项目没有给我太多时间,所以我正在尝试寻找一个轻量级和易于学习的信号库。(嗯..好吧,如果你知

c - 是否有可用的跨平台 C 信号库(更好的开源)?

我最近在做一个项目,我需要将一部分LinuxC代码移植到Windows。该代码使用Linux信号机制(我的意思是“sigaction”、“sigprocmast”等),但在Windows上不受支持。是否有可用的C/C++库实现跨平台信号机制(更好的开源)?目前我只需要该库支持Linux和Windows.我认为这个问题对您来说也很有意义,因为有一天您可能会遇到类似的任务。我的一位同事告诉我,ACE是一个功能强大的库,完美地实现了跨平台信号机制,但他说这是一个巨大的库,真的需要一些时间来研究它。我的项目没有给我太多时间,所以我正在尝试寻找一个轻量级和易于学习的信号库。(嗯..好吧,如果你知

c - 在 C 中覆盖 _init 函数,它有多安全?

我正在构建一个共享库形式的调试内存工具,我在运行时链接到一个可执行文件(包括malloc系列的重写方法)。为了处理我的数据结构的初始化,我简单地使用了一个条件变量。每次调用我的malloc时,我都会检查变量是否未设置,然后调用负责初始化结构的函数。现在这对于运行单个执行线程的程序来说效果很好,但如果程序包含超过1个线程,就会出现问题。确保在用户生成任何线程之前进行初始化的唯一方法(我能想到)是覆盖_init,如图所示inthislink.现在这个小例子运行正确了,但是当我尝试在我自己的共享库上覆盖_init时,我在尝试链接它时遇到了这个错误:memory2.o:Infunction`_

c - 在 C 中覆盖 _init 函数,它有多安全?

我正在构建一个共享库形式的调试内存工具,我在运行时链接到一个可执行文件(包括malloc系列的重写方法)。为了处理我的数据结构的初始化,我简单地使用了一个条件变量。每次调用我的malloc时,我都会检查变量是否未设置,然后调用负责初始化结构的函数。现在这对于运行单个执行线程的程序来说效果很好,但如果程序包含超过1个线程,就会出现问题。确保在用户生成任何线程之前进行初始化的唯一方法(我能想到)是覆盖_init,如图所示inthislink.现在这个小例子运行正确了,但是当我尝试在我自己的共享库上覆盖_init时,我在尝试链接它时遇到了这个错误:memory2.o:Infunction`_

c - perror() 和 printf() 之间的区别

我读到过perror()和printf()都写入终端屏幕。但是perror()写入stderr而printf()写入stdout。因此,要打印错误,为什么在printf()可以做到的情况下使用perror()。 最佳答案 printf()无法写入stderr。fprintf()可以。perror()总是如此。没有要求写入stdout或stderr写入终端屏幕-这取决于实现(因为并非所有系统甚至都有终端).也没有要求写入stdout和stderr导致写入同一设备(例如,一个可以重定向到文件,而另一个重定向到管道).perror()将使

c - perror() 和 printf() 之间的区别

我读到过perror()和printf()都写入终端屏幕。但是perror()写入stderr而printf()写入stdout。因此,要打印错误,为什么在printf()可以做到的情况下使用perror()。 最佳答案 printf()无法写入stderr。fprintf()可以。perror()总是如此。没有要求写入stdout或stderr写入终端屏幕-这取决于实现(因为并非所有系统甚至都有终端).也没有要求写入stdout和stderr导致写入同一设备(例如,一个可以重定向到文件,而另一个重定向到管道).perror()将使

c - 如何在 Ctrl+D 后重新启动标准输入?

运行一个需要来自终端输入的程序,我可以通过Ctrl+D来“关闭”stdin。之后有没有办法重新打开标准输入? 最佳答案 在linux通常在POSIXy系统上,当您在终端中按下Ctrl+D时,标准输入描述符不会关闭;它只是使伪终端层变得可读,read()返回0。这就是POSIXy系统指示输入结束的方式。这并不意味着文件描述符(甚至是C库在其之上提供的流句柄)被关闭。正如SteveSummit在评论中提到的,您只需要使用clearerr()来清除流的输入结束状态,以便能够读取更多数据;这会告诉C库您注意到状态发生了变化,但无论如何都想尝

c - 如何在 Ctrl+D 后重新启动标准输入?

运行一个需要来自终端输入的程序,我可以通过Ctrl+D来“关闭”stdin。之后有没有办法重新打开标准输入? 最佳答案 在linux通常在POSIXy系统上,当您在终端中按下Ctrl+D时,标准输入描述符不会关闭;它只是使伪终端层变得可读,read()返回0。这就是POSIXy系统指示输入结束的方式。这并不意味着文件描述符(甚至是C库在其之上提供的流句柄)被关闭。正如SteveSummit在评论中提到的,您只需要使用clearerr()来清除流的输入结束状态,以便能够读取更多数据;这会告诉C库您注意到状态发生了变化,但无论如何都想尝